为什么.h文件里需要#ifndef、#define和#endif? 您所在的位置:网站首页 vscode ifndef 为什么.h文件里需要#ifndef、#define和#endif?

为什么.h文件里需要#ifndef、#define和#endif?

2024-07-14 05:52| 来源: 网络整理| 查看: 265

       本文转载自好小子0325的一篇文章!感觉写的很不错,特意转载方便学习。        想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?        其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。        比如:存在a.h文件**#include "c.h"而此时b.cpp文件导入了#include “a.h”** 和**#include “c.h”**此时就会造成c.h重复引用。

       头文件被重复引用引起的后果:

       有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。        有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。

       是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?

       答案:不是一定要加,但是不管怎样,用#ifnde xxx #define xxx #endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。

       下面给一个#ifndef/#define/#endif的格式:        #ifndef A_H意思是**“if not define a.h”** 如果不存在a.h        接着的语句应该#define A_H 就引入a.h        最后一句应该写#endif 否则不需要引入

#ifndef __GRAPHICS_H__ // 防止graphics.h被重复引用 #define __GRAPHICS_H__ #include // 引用标准库的头文件 … #include “header.h” // 引用非标准库的头文件 … void Function1(…); // 全局函数声明 … class Box // 类结构声明 { … }; #endif

#include 与 #include "file.h"的区别? #include< >格式:引用标准库头文件,编译器从标准库目录开始搜索(包括编译器设置的路径) #include" "格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 双引号表示:        先在程序的源文件所在的目录查找,如果未找到则去系统默认目录查找,通常用于包括程序作者编写的头文件;        首先在当前的源文件目录中查找,若未找到才到包含目录中去查找 尖括号表示:        知道系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件。        在包含文件目录中去查找(包括文件目录是用户在设置环境是设置的),而不在源文件目录去查找;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有